package com.example1;

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class TestMain {
    @Test
    public void test1(){
        //1、创建person类对象的实例
        Person person = new Person();
        System.out.println(person);
//        2、属性赋值
        person.age = 10;
        System.out.println(person.age);
//        3、调用方法
        person.show();

    }

//    使用反射的方式
    @Test
    public void test2() throws Exception {
        //1、创建person类对象的实例(有三种方式：
        // 第一种Class.forName())
//        方式1：Class clazz = Class.forName("包名.类名");
//        Class<Person> clazz = Class.forName("com.example1.Person");
        //  方式2：Class clazz = 类名.class;
        Class<Person> clazz = Person.class;
        //  方式3：Class clazz = 对象.getClass();//Object类中的方法
//        Person person = new Person();
//        Class clazz = person.getClass();


        Person person = clazz.newInstance();
        System.out.println(person);
//        2、调用属性
        Field ageField = clazz.getField("age");
        ageField.set(person,10);
        System.out.println(ageField.get(person));
//        3、调用方法
        Method showMethod = clazz.getMethod("show");
//        3.1、让方法执行
        showMethod.invoke(person);

    }
}
